home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr12 / toplib50.zip / WIZ7UNP.ZIP / WIZ.ASM next >
Assembly Source File  |  1992-11-04  |  5KB  |  129 lines

  1. ;compile this .asm file as normal
  2. ;use the link option /cp:60 which will allocate this program
  3. ;60 paragraphs of memory
  4. ;exe format
  5. DOSSEG
  6.  
  7. .MODEL  SMALL
  8.  
  9. .STACK  100h
  10.  
  11. .DATA
  12.  
  13. INT_NUMBER      EQU     21h             ;INTERRUPT NUMBER TO HOOK INTO
  14. LOAD_PARAMETERS DW      00h
  15.                 DW      0080h           ;COMMAND LINE IN PSP - OFFSET
  16.                 DW      @CURSEG         ;       SEGMENT
  17.                 DW      005Ch           ;FIRST FCB IN PSP    - OFFSET
  18.                 DW      @CURSEG         ;       SEGMENT
  19.                 DW      006Ch           ;SECOND FCB IN PSP   - OFFSET
  20.                 DW      @CURSEG         ;       SEGMENT
  21.  
  22. OLD_VECTOR      DD      0H              ;STORAGE FOR OLD INTERRUPT
  23.                                         ;VECTOR
  24. MEM_SIZE        EQU     200h            ;FUTURE USE FOR INT 21 SERV.4A
  25. PROGRAM_NAME    DB      "DS.EXE",0
  26. OFFSET_1        EQU     2B45h           ;FIRST OFFSET TO MAKE CHANGES
  27. VALUE_1         EQU     0EBh            ;THESE ARE THE NEW VALUES TO BE
  28. HEADER          DB      "         **TOP**",0Dh,0Ah,0Ah
  29.                 DB      "   TIRED OF PROTECTION",0Dh,0Ah,0Ah
  30.                 DB      "CRACKED BY THE MAD DOCTOR",0Dh,0Ah,"$"
  31. FAILED_LOAD     DB      0Ah,0Ah,"FAILED TO LOAD PROGRAM",0Dh,0Ah,"$"
  32. NOT_FOUND       DB      "FILE NOT FOUND",0Dh,0Ah,"$"
  33. INSUF_MEMORY    DB      "INSUFFICIENT MEMORY",0Dh,0Ah,"$"
  34.  
  35.  
  36. .CODE
  37.  
  38. LOADER          PROC
  39.  
  40.         JMP     START
  41.  
  42. INTERRUPT_ENTRY         PROC    FAR
  43.         PUSHF
  44.         PUSH    AX                      ;SAVE NEEDED REGISTERS
  45.         PUSH    BX
  46.         PUSH    BP
  47.         CMP     AH,4Ah
  48.         JNZ     QUIT
  49.         MOV     AX,SP
  50.         MOV     BP,AX
  51.         CMP     BYTE PTR [BP+8],60h
  52.         JNZ     QUIT
  53.         CMP     BYTE PTR [BP+9],4Bh
  54.         JNZ     QUIT
  55.         XOR     AX,AX
  56.         MOV     BX,OFFSET_1             ;FIRST OFFSET
  57.         MOV     AL,VALUE_1
  58.         MOV     [BX],AL                 ;MOV VALUE_1 INTO DS:OFFSET_1
  59.  
  60.         
  61. QUIT:
  62.         POP     BP                      ;RESTORE NEEDED REGISTERS
  63.         POP     BX
  64.         POP     AX
  65.         POPF
  66.         JMP     DWORD PTR CS:OLD_VECTOR ;JMP TO THE REST OF THE
  67.                                         ;INTERRUPT
  68.  
  69. INTERRUPT_ENTRY         ENDP
  70.  
  71. START           PROC
  72.  
  73.         MOV     BX,DGROUP               ;INITIALIZE DS TO THE DATA
  74.         MOV     DS,BX                   ;SEGMENT
  75.         MOV     DX,OFFSET HEADER
  76.         MOV     AH,9
  77.         INT     21h                     ;PRINT A TITLE
  78.         PUSH    DS
  79.         PUSH    DS
  80.         MOV     AL,INT_NUMBER
  81.         MOV     AH,35h
  82.         INT     21h                     ;GET INT VECTOR FOR INT21
  83.                                         ;AND PUT INTO ES:BX
  84.         MOV     WORD PTR OLD_VECTOR[0],BX     ;SAVE OLD INT VECTORS
  85.         MOV     WORD PTR OLD_VECTOR[2],ES
  86.         MOV     DX,OFFSET INTERRUPT_ENTRY
  87.         MOV     AX,CS
  88.         MOV     DS,AX
  89.         MOV     AL,INT_NUMBER
  90.         MOV     AH,25h
  91.         INT     21h                     ;PUT NEW INT VECTOR IN FOR
  92.                                         ;INTERRUPT_ENTRY
  93.         POP     DS                      ;RE-INITIALIZE DS AND ES TO
  94.         POP     ES                      ;THE DATA SEGMENT
  95.         MOV     DX,OFFSET PROGRAM_NAME
  96.         MOV     BX,OFFSET LOAD_PARAMETERS
  97.         MOV     AX,4B00h                ;LOAD PROGRAM, NAME AT DS:DX,
  98.         INT     21h                     ;PARAMETERS AT ES:BX
  99.         JNC     RESTORE                 ;JMP IF LOAD WAS SUCCESSFUL
  100.         PUSH    AX
  101.         MOV     AH,9                    ;PRINT THAT LOAD FAILED
  102.         MOV     DX,OFFSET FAILED_LOAD
  103.         INT     21h
  104.         POP     AX
  105.         CMP     AX,8                    ;IF AX=8 THEN THERE WAS
  106.         JE      NO_MEMORY               ;INSUFFICIENT MEMORY
  107.         CMP     AX,2
  108.         JNE     RESTORE                 ;IF NOT 2 OR 8 THEN ?--
  109.                                         ;JUST RESTORE AND EXIT
  110.         MOV     DX,OFFSET NOT_FOUND     ;IF AX=2 THEN THE FILE WAS NOT
  111.         JMP     PRINT_ERROR             ;FOUND
  112. NO_MEMORY:
  113.         MOV     DX,OFFSET INSUF_MEMORY
  114. PRINT_ERROR:
  115.         MOV     AH,9
  116.         INT     21h
  117. RESTORE:
  118.         LDS     DX,DWORD PTR OLD_VECTOR
  119.         MOV     AL,INT_NUMBER           ;RESTORE OLD INTERRUPT VECTOR
  120.         MOV     AH,25h
  121.         INT     21h
  122.         MOV     AX,4C00h                ;EXIT TO DOS
  123.         INT     21h
  124.  
  125. START           ENDP
  126. LOADER          ENDP
  127.         END     LOADER
  128.  
  129.